home *** CD-ROM | disk | FTP | other *** search
/ com!online 2005 May / com_0505_1.iso / opensource / top10 / amc_install.exe / {app} / Scripts / Amazon.fr (data).ifs < prev    next >
Encoding:
Text File  |  2004-05-10  |  14.7 KB  |  460 lines

  1. // GETINFO SCRIPTING
  2. // Amazon.fr (image et donnΘes complΦtes ajoutΘes au donnΘes existantes)
  3.  
  4. (***************************************************
  5.  *  Script d'importation pour :                    *
  6.  *  AMAZON FRANCE , http://www.amazon.fr           *
  7.  *                                                 *
  8.  *  Script by Willems Olivier based on the script  *
  9.  *  2003-12-25 : correction by antp                *
  10.  *                                                 *
  11.  *  A utiliser avec Ant Movie Catalog 3.4.0        *
  12.  *  www.ant.be.tf/moviecatalog ╖╖╖ www.buypin.com  *
  13.  *                                                 *
  14.  *  The source code of the script can be used in   *
  15.  *  another program only if full credits to        *
  16.  *  script author and a link to Ant Movie Catalog  *
  17.  *  website are given in the About box or in       *
  18.  *  the documentation of the program               *
  19.  ***************************************************)
  20.  
  21. program AMAZON_FR;
  22.  
  23. //ParamΦtres du script
  24. const
  25.  
  26.   // Mettre les valeurs α True pour importer les champs, ou False pour ne pas en tenir compte
  27.   ConfirmTitre = True;        // False : ne demande pas de confirmation du titre avant recherche
  28.   TempsPause = 500;        // 1000 = 1 Seconde (permet d'Θviter les timeout en cas de saturation serveur)
  29.   ImportImage = True;        // False : n'importe pas d'image
  30.   ImportGrandeImage = True;     // False : petite image importΘe
  31.   ImportBonus = True;        // False : n'importe pas les bonus dans la case Remarques
  32.   ImportTitreOriginal = True;    // False : n'importe pas le titre original
  33.   ImportTitreTraduit = True;    // False : n'importe pas le titre franτais
  34.   ImportLangue = True;    // False : n'importe pas les langues
  35.   ImportSoustitre = True;    // False : n'importe pas les soustitres
  36.   ImportActeur = True;    // False : n'importe pas les acteurs
  37.   ImportRealisateur = True;    // False : n'importe pas le rΘalisateur
  38.   ImportProducteur = True;    // False : n'importe pas le producteur
  39.   ImportSynopsis = True;    // False : n'importe pas le descriptif
  40.   ImportZone = True;    // False : n'importe pas la zone du DVD
  41.   ImportDate = True;    // False : n'importe pas la date de parution
  42.   ImportGenre = True;    // False : n'importe pas le premier genre
  43.   ImportURL = True;       // False ne place pas l'url du film
  44.   ImportAddImport = False;  // False : remplace le contenu des champs par les donnΘes importΘes
  45.  
  46. var
  47.   MovieName: string;
  48.  
  49. function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
  50. var
  51.   i: Integer;
  52. begin
  53.   result := -1;
  54.   if StartAt < 0 then
  55.     StartAt := 0;
  56.   for i := StartAt to List.Count-1 do
  57.     if Pos(Pattern, List.GetString(i)) <> 0 then
  58.     begin
  59.       result := i;
  60.       Break;
  61.     end;
  62. end;
  63.  
  64. procedure AnalyzePage(Address: string);
  65. var
  66.   Page: TStringList;
  67.   LineNr: Integer;
  68.  
  69. begin
  70.   Sleep(TempsPause); // Attente X seconde : Evite les timeout sur le serveur
  71.   Page := TStringList.Create;
  72.   Page.Text := GetPage(Address);
  73.   if pos('Sur ce DVD', Page.Text) > 0 then
  74.     begin
  75.     AnalyzeMoviePage(Page);
  76.     // Si on veut on prend l'adresse de la page
  77.     if ImportURL then
  78.       begin
  79.       SetField(fieldURL, Address);
  80.       end;
  81.     end
  82.   else
  83.  
  84.   if pos('satisfaisante pour votre recherche sur', Page.Text) > 0 then
  85.   begin
  86.     ShowMessage('Aucun Film TrouvΘ pour : ' + MovieName);
  87.   end else
  88.  
  89.   if pos('Les articles les plus recherchés correspondant à', Page.Text) > 0 then
  90.   begin
  91.     PickTreeClear;
  92.     LineNr := 0;
  93.     LineNr := FindLine('résultats au total pour', Page, LineNr);
  94.     if LineNr > -1 then
  95.     begin
  96.       //PickTreeAdd('Films TrouvΘs :', '');
  97.       PickTreeAdd('Films TrouvΘs pour ' + MovieName + ' :', '');
  98.       AddMoviesTitles(Page, LineNr);
  99.     end;
  100.     if PickTreeExec(Address) then
  101.       AnalyzePage(Address);
  102.   end else
  103.  
  104.   begin
  105.     PickTreeClear;
  106.     LineNr := 0;
  107.     LineNr := FindLine('résultats au total pour', Page, LineNr);
  108.     if LineNr > -1 then
  109.     begin
  110.       //PickTreeAdd('Films TrouvΘs :', '');
  111.       PickTreeAdd('Films TrouvΘs pour ' + MovieName + ' :', '');
  112.       AddMoviesTitles(Page, LineNr);
  113.     end;
  114.     if PickTreeExec(Address) then
  115.       AnalyzePage(Address);
  116.   end;
  117.  
  118.   Page.Free;
  119. end;
  120.  
  121. procedure AnalyzeMoviePage(Page: TStringList);
  122. var
  123.   Line, Value, Value2, FullValue: string;
  124.   LineNr: Integer;
  125.   BeginPos, EndPos: Integer;
  126.   Dummy: string;
  127.  
  128.  
  129. begin
  130.    // Zone
  131.   if ImportZone then
  132.     begin
  133.     LineNr := FindLine('<BR>Zone : ', Page, 0);
  134.     if LineNr > -1 then
  135.     begin
  136.       Line := Page.GetString(LineNr);
  137.       BeginPos := pos('<BR>Zone : ', Line)+11;
  138.       line := copy(line,beginpos, length(line) - beginpos);
  139.       EndPos := pos('<BR>', Line);
  140.       Value := 'DVD ' + copy(Line, 1, EndPos-1);
  141.       if ImportAddImport then
  142.         begin
  143.         GetField(fieldVideoFormat, Dummy);
  144.         Value := Dummy + Value;
  145.         SetField(fieldVideoFormat, Value);
  146.         end
  147.       else
  148.         SetField(fieldVideoFormat, Value);
  149.     end;
  150.   end;
  151.  
  152.    // Genre
  153.   if ImportGenre then
  154.     begin
  155.     LineNr := FindLine('Rechercher des DVD par sujet :', Page, 0);
  156.     if LineNr > -1 then
  157.     begin
  158.       Line := Page.GetString(LineNr+2);
  159.       EndPos := pos('">', Line);
  160.       Value := copy(Line, 1, EndPos-1);
  161.       if ImportAddImport then
  162.         begin
  163.         GetField(fieldCategory, Dummy);
  164.         Value := Dummy + Value;
  165.         SetField(fieldCategory, Value);
  166.         end
  167.       else
  168.         SetField(fieldCategory, Value);
  169.     end;
  170.   end;
  171.  
  172.      // Date parution
  173.   if ImportDate then
  174.     begin
  175.     LineNr := FindLine('Date de parution : ', Page, 0);
  176.     if LineNr > -1 then
  177.     begin
  178.       Line := Page.GetString(LineNr);
  179.       BeginPos := pos('Date de parution : ', Line)+24;
  180.       Line := copy(Line, Beginpos, Length(Line) - Beginpos);
  181.       EndPos := pos('<br>', Line);
  182.       Value := copy(Line, 1, EndPos-1);
  183.       Value := copy (Value, Length(Value)-4,Length(Value)); // prend les 4 dernier
  184.         // place l'annΘe
  185.       SetField(fieldYear, Value);
  186.     end;
  187.   end;
  188.  
  189.    // Langue
  190.   if ImportLangue then
  191.     begin
  192.     LineNr := FindLine('Langues et formats sonores : ', Page, 0);
  193.     if LineNr > -1 then
  194.     begin
  195.       Line := Page.GetString(LineNr);
  196.       BeginPos := pos('Langues et formats sonores : ', Line)+29;
  197.       line := copy(line,beginpos, length(line) - beginpos);
  198.       EndPos := pos('<BR>', Line);
  199.       Value := copy(Line, 1, EndPos-1);
  200.       if ImportAddImport then
  201.         begin
  202.         GetField(fieldLanguages, Dummy);
  203.         Value := Dummy + Value;
  204.         SetField(fieldLanguages, Value);
  205.         end
  206.       else
  207.         SetField(fieldLanguages, Value);
  208.     end;
  209.   end;
  210.  
  211.    // Soustitres
  212.   if ImportSoustitre then
  213.     begin
  214.     LineNr := FindLine('Sous-titres : ', Page, 0);
  215.     if LineNr > -1 then
  216.     begin
  217.       Line := Page.GetString(LineNr);
  218.       BeginPos := pos('Sous-titres : ', Line)+14;
  219.       Line := copy(Line, Beginpos, length(line) - beginpos);
  220.       EndPos := pos('<B', Line);
  221.       Value := copy(Line, 1, EndPos-1);
  222.       if ImportAddImport then
  223.         begin
  224.         GetField(fieldSubtitles, Dummy);
  225.         Value := Dummy + Value;
  226.         SetField(fieldSubtitles, Value);
  227.         end
  228.       else
  229.         SetField(fieldSubtitles, Value);
  230.     end;
  231.   end;
  232.  
  233.    // Acteur
  234.   if ImportActeur then
  235.     begin
  236.     Value := '';
  237.     // on recherche la liste des acteurs
  238.     LineNr := FindLine('<b>Avec :</b>', Page, 0);
  239.     LineNr := LineNr -1;  // astuce pour redΘmarrer de cette ligne
  240.                           // sans pour autant boucler α l'infini dans le while
  241.     while LineNr > -1 do
  242.       // si on a trouvΘ on boucle sur les lignes de la liste des acteurs
  243.       begin
  244.       // on cherche la clΘ
  245.       LineNr := FindLine('field-actor=', Page, LineNr+1);
  246.       if LineNr > -1 then
  247.         begin
  248.         // si on a trouvΘ
  249.         Line := Page.GetString(LineNr);
  250.         repeat
  251.           //on boucle sur les acteurs de la ligne
  252.           BeginPos := pos('field-actor=', Line);
  253.           if BeginPos > 0 then
  254.             begin
  255.             BeginPos := BeginPos+12;
  256.             // supprime le dΘbut de la ligne, rΘduit lla liste des acteurs
  257.             Line := copy(Line,BeginPos, Length(Line) - BeginPos);
  258.             EndPos := pos('/', Line);
  259.             // reprend le nom de l'acteur et l'ajoute
  260.             Value := Value + ', ' + copy(Line, 1, EndPos - 1);
  261.             end;
  262.         until BeginPos <= 0;  // ne sort que s'il n'y a plus d'acteur dans la ligne
  263.         end;
  264.       end;  // ne sort que s'il n'y a plus de lignes avec des acteurs
  265.  
  266.     if Length(Value)> 0 then
  267.       // si on a trouvΘ des acteurs
  268.       begin
  269.       Value := copy(Value, 3, Length(Value)-2);   // Retire le premier ', '
  270.       Value := StringReplace(Value, '%20', ' ');  // supprime les '%20'
  271.       if ImportAddImport then
  272.         begin
  273.         GetField(fieldActors, Dummy);
  274.         Value := Dummy + Value;
  275.         SetField(fieldActors, Value);
  276.         end
  277.       else
  278.         SetField(fieldActors, Value);
  279.       end;
  280.     end;
  281.  
  282.    // RΘalisateur
  283.   if ImportRealisateur then
  284.     begin
  285.     LineNr := FindLine('field-director=', Page, 0);
  286.     if LineNr > -1 then
  287.     begin
  288.       Line := Page.GetString(LineNr);
  289.       BeginPos := pos('field-director=', Line)+15;
  290.       line := copy(line,beginpos, length(line) - beginpos);
  291.       EndPos := pos('/', Line);
  292.       Value := copy(Line, 1, EndPos-1);
  293.       Value := StringReplace(Value, '%20', ' ');
  294.       if ImportAddImport then
  295.         begin
  296.         GetField(fieldDirector, Dummy);
  297.         Value := Dummy + Value;
  298.         SetField(fieldDirector, Value);
  299.         end
  300.       else
  301.         SetField(fieldDirector, Value);
  302.     end;
  303.   end;
  304.   
  305.     // Producteur
  306.   if ImportProducteur then
  307.     begin
  308.     LineNr := FindLine('diteur :', Page, 0);
  309.     if LineNr > -1 then
  310.     begin
  311.       Line := Page.GetString(LineNr);
  312.       BeginPos := pos('diteur :', Line)+14;
  313.       line := copy(line,beginpos, length(line) - beginpos);
  314.       EndPos := pos('<br>', Line);
  315.       Value := copy(Line, 1, EndPos-1);
  316.       if ImportAddImport then
  317.         begin
  318.         GetField(fieldProducer, Dummy);
  319.         Value := Dummy + Value;
  320.         SetField(fieldProducer, Value);
  321.         end
  322.       else
  323.         SetField(fieldProducer, Value);
  324.     end;
  325.   end;
  326.  
  327.   // Image
  328.   if ImportImage then
  329.   begin
  330.     LineNr := FindLine('<a href="http://images-eu.amazon.com/images/P/', Page, 0);
  331.     if LineNr > -1 then
  332.     begin
  333.       Line := Page.GetString(LineNr);
  334.       BeginPos := pos('src="', Line) + 4;
  335.       Delete(Line, 1, BeginPos);
  336.       EndPos := pos('"', Line);
  337.       Value := copy(Line, 1, EndPos - 1);
  338.       if ImportGrandeImage then
  339.         Value := StringReplace(Value, 'MZZZZZZZ', 'LZZZZZZZ'); // Change l'URL pour prendre la grande au lieu de la petite image
  340.       Sleep(TempsPause*3); // Attente 2X seconde : Evite les timeout sur le serveur
  341.       GetPicture(Value, False); // False = stocke l'image dans la base
  342.     end;
  343.   end;
  344.  
  345.    // Titre Original
  346.   if ImportTitreOriginal then
  347.     begin
  348.     LineNr := FindLine('Titre Original : ', Page, 0);
  349.     if LineNr > -1 then
  350.     begin
  351.       Line := Page.GetString(LineNr);
  352.       BeginPos := pos('Titre Original : ', Line)+27;
  353.       EndPos := pos('<br>', Line);
  354.       Value := copy(Line, BeginPos, EndPos - BeginPos);
  355.       SetField(fieldOriginalTitle, Value);
  356.     end;
  357.   end;
  358.  
  359.    // Titre Traduit
  360.   if ImportTitreTraduit then
  361.     begin
  362.     LineNr := FindLine('Amazon.fr : DVD: ', Page, 0);
  363.     if LineNr > -1 then
  364.       begin
  365.       Line := Page.GetString(LineNr);
  366.       BeginPos := pos('Amazon.fr : DVD: ', Line)+22;
  367.       EndPos := pos('</title>', Line);
  368.       Value := copy(Line, BeginPos, EndPos - BeginPos);
  369.       SetField(fieldTranslatedTitle, Value);
  370.       end;
  371.     end;
  372.  
  373.   // Bonus
  374.   if ImportBonus then
  375.   begin
  376.     LineNr := FindLine('<br><b>Bonus :</b><br>', Page, 0);
  377.     if LineNr > -1 then
  378.     begin
  379.       LineNr := LineNr + 1;
  380.       Line := Page.GetString(LineNr);
  381.       EndPos := Pos('<BR>', Line);
  382.       if EndPos > 0 then
  383.         Delete(Line, EndPos, Length(Line));
  384.       Value := 'Bonus :' + #13#10 + StringReplace(StringReplace(Line, '<br>', #13#10), '•', '-');
  385.       HTMLDecode(Value);
  386.       SetField(fieldComments, Value);
  387.     end;
  388.   end;
  389.  
  390.   // Description, synopsis du film
  391.   if ImportSynopsis then
  392.     begin
  393.     LineNr := FindLine('Synopsis', Page, 0);
  394.     if LineNr > -1 then
  395.       begin
  396.       Line := Page.GetString(LineNr+1);     // prend la ligne suivante car synopsis est seule sur sa ligne
  397. //      BeginPos := Pos('Synopsis', Line);
  398.   //    Line := copy(Line, BeginPos, Length(Line)- BeginPos); // ne garde que la fin
  399.       BeginPos := Pos('<span class="serif">', Line)+20;
  400.       EndPos := Pos('</span>', Line);
  401.       Value := copy (Line,BeginPos,EndPos-BeginPos);
  402.       Value := StringReplace(StringReplace(Value, '<br>', #13#10), '•', '-');
  403.       HTMLDecode(Value);
  404.       SetField(fieldDescription, Value);
  405.       end;
  406.     end;
  407.  
  408.   DisplayResults;
  409. end;
  410.  
  411. procedure AddMoviesTitles(Page: TStringList; var LineNr: Integer);
  412. var
  413.   Line: string;
  414.   MovieTitle, MovieAddress: string;
  415.   StartPos: Integer;
  416.   StartImg: Integer;
  417.   StartLst: Integer;
  418.   LastLine: Integer;
  419.  
  420. begin
  421.   repeat
  422.     LineNr := LineNr + 1;
  423.     Line := Page.GetString(LineNr);
  424.     LastLine := Page.count;
  425.     StartPos := pos('<a href=/exec/obidos/ASIN/', Line);
  426.     StartImg := pos('<img src="http://images-eu.amazon.com/images/', Line);
  427.     StartLst := pos('</a>', Line);
  428.     if StartPos+StartImg+StartLst < StartPos+StartPos+StartPos-StartImg-StartLst then
  429.     begin
  430.       Startpos := Startpos + 9;
  431.       MovieAddress := copy(Line, StartPos, pos('qid', Line) - StartPos);
  432.       StartPos := pos('<b>', Line) + 3;
  433.       MovieTitle := copy(Line, StartPos, (StartPos + 150)- StartPos); 
  434.       HTMLDecode(Movietitle);
  435.       PickTreeAdd(MovieTitle, 'http://www.amazon.fr/' + MovieAddress);
  436.     end;
  437.   until (LineNr > Lastline);
  438. end;
  439.  
  440. begin
  441.   if CheckVersion(3,4,0) then
  442.   begin
  443.     MovieName := GetField(fieldTranslatedTitle);
  444.     if MovieName = '' then
  445.       MovieName := GetField(fieldOriginalTitle);
  446.  
  447.   if ConfirmTitre then
  448.     begin
  449.      if Input('Amazon.fr Import', 'Entrer le titre du film :', MovieName) then
  450.       begin
  451.        AnalyzePage('http://www.amazon.fr/exec/obidos/search-handle-url/index=dvd-fr&field-title='+UrlEncode(MovieName));
  452.       end;
  453.      end else
  454.       begin
  455.        AnalyzePage('http://www.amazon.fr/exec/obidos/search-handle-url/index=dvd-fr&field-title='+UrlEncode(MovieName));     
  456.       end;
  457.   end else
  458.    ShowMessage('Ce script requiert une version plus rΘcente de Ant Movie Catalog (au moins la version 3.4.0)');
  459. end.
  460.